{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import nest\n",
    "import nest.raster_plot\n",
    "from numpy import exp"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "def LambertWm1(x):\n",
    "    nest.ll_api.sli_push(x)\n",
    "    nest.ll_api.sli_run('LambertWm1')\n",
    "    y = nest.ll_api.sli_pop()\n",
    "    return y\n",
    "\n",
    "\n",
    "def ComputePSPnorm(tauMem, CMem, tauSyn):\n",
    "    a = (tauMem / tauSyn)\n",
    "    b = (1.0 / tauSyn - 1.0 / tauMem)\n",
    "\n",
    "    # time of maximum\n",
    "    t_max = 1.0 / b * (-LambertWm1(-exp(-1.0 / a) / a) - 1.0 / a)\n",
    "\n",
    "    # maximum of PSP for current of unit amplitude\n",
    "    return (exp(1.0) / (tauSyn * CMem * b) *\n",
    "            ((exp(-t_max / tauMem) - exp(-t_max / tauSyn)) / b -\n",
    "             t_max * exp(-t_max / tauSyn)))\n",
    "\n",
    "\n",
    "nest.ResetKernel()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "dt = 0.1    # the resolution in ms\n",
    "simtime = 500.0  # Simulation time in ms\n",
    "delay = 1.5    # synaptic delay in ms"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Weight, rate and connection probability"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "g = 5.0  # ratio inhibitory weight/excitatory weight\n",
    "eta = 2.0  # external rate relative to threshold rate\n",
    "epsilon = 0.1  # connection probability"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Number of neurons in the network"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "order = 2500\n",
    "NE = 4 * order  # number of excitatory neurons\n",
    "NI = 1 * order  # number of inhibitory neurons\n",
    "N_neurons = NE + NI   # number of neurons in total\n",
    "N_rec = 50      # record from 50 neurons"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Connectivity parameters"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "CE = int(epsilon * NE)  # number of excitatory synapses per neuron\n",
    "CI = int(epsilon * NI)  # number of inhibitory synapses per neuron\n",
    "C_tot = int(CI + CE)      # total number of synapses per neuron"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Neuron parameters"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "tauSyn = 0.5  # synaptic time constant in ms\n",
    "tauMem = 20.0  # time constant of membrane potential in ms\n",
    "CMem = 250.0  # capacitance of membrane in in pF\n",
    "theta = 20.0  # membrane threshold potential in mV\n",
    "neuron_params = {\"C_m\": CMem,\n",
    "                 \"tau_m\": tauMem,\n",
    "                 \"tau_syn_ex\": tauSyn,\n",
    "                 \"tau_syn_in\": tauSyn,\n",
    "                 \"t_ref\": 2.0,\n",
    "                 \"E_L\": 0.0,\n",
    "                 \"V_reset\": 0.0,\n",
    "                 \"V_m\": 0.0,\n",
    "                 \"V_th\": theta}\n",
    "J = 0.1        # postsynaptic amplitude in mV\n",
    "J_unit = ComputePSPnorm(tauMem, CMem, tauSyn)\n",
    "J_ex = J / J_unit  # amplitude of excitatory postsynaptic current\n",
    "J_in = -g * J_ex    # amplitude of inhibitory postsynaptic current"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### External rate"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "nu_th = (theta * CMem) / (J_ex * CE * exp(1) * tauMem * tauSyn)\n",
    "nu_ex = eta * nu_th\n",
    "p_rate = 1000.0 * nu_ex * CE"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Configure simulation kernel"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "nest.SetKernelStatus({\"resolution\": dt,\n",
    "                      \"print_time\": True,\n",
    "                      \"overwrite_files\": True,\n",
    "                      \"total_num_virtual_procs\": 4})"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Create nodes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "nodes_ex = nest.Create(\"iaf_psc_alpha\", NE)\n",
    "nodes_in = nest.Create(\"iaf_psc_alpha\", NI)\n",
    "nodes_ex.set(neuron_params)\n",
    "nodes_in.set(neuron_params)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "noise = nest.Create(\"poisson_generator\")\n",
    "noise.rate = p_rate  # same as noise.set({\"rate\": p_rate})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "espikes = nest.Create(\"spike_detector\")\n",
    "ispikes = nest.Create(\"spike_detector\")\n",
    "\n",
    "espikes.set(label=\"brunel-py-ex\", record_to=\"ascii\")\n",
    "ispikes.set(label=\"brunel-py-in\", record_to=\"ascii\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Create connections"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "nest.CopyModel(\"static_synapse\", \"excitatory\",\n",
    "               {\"weight\": J_ex, \"delay\": delay})\n",
    "nest.CopyModel(\"static_synapse\", \"inhibitory\",\n",
    "               {\"weight\": J_in, \"delay\": delay})\n",
    "nest.Connect(noise, nodes_ex, syn_spec=\"excitatory\")\n",
    "nest.Connect(noise, nodes_in, syn_spec=\"excitatory\")\n",
    "\n",
    "nest.Connect(nodes_ex[:N_rec], espikes, syn_spec=\"excitatory\")\n",
    "nest.Connect(nodes_in[:N_rec], ispikes, syn_spec=\"excitatory\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "conn_params_ex = {'rule': 'fixed_indegree', 'indegree': CE}\n",
    "nest.Connect(nodes_ex, nodes_ex + nodes_in, conn_params_ex, \"excitatory\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "conn_params_in = {'rule': 'fixed_indegree', 'indegree': CI}\n",
    "nest.Connect(nodes_in, nodes_ex + nodes_in, conn_params_in, \"inhibitory\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Simulate"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "nest.Simulate(simtime)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Get results"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "events_ex = espikes.n_events  # same as espikes.get(\"n_events\") \n",
    "events_in = ispikes.n_events"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "num_synapses = (nest.GetDefaults(\"excitatory\")[\"num_connections\"] +\n",
    "                nest.GetDefaults(\"inhibitory\")[\"num_connections\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Brunel network simulation (Python)\n",
      "Number of neurons : 12500\n",
      "Number of synapses: 15637600\n",
      "       Exitatory  : 12512500\n",
      "       Inhibitory : 3125000\n",
      "Excitatory events : 714\n",
      "Inhibitory events : 719\n"
     ]
    }
   ],
   "source": [
    "print(\"Brunel network simulation (Python)\")\n",
    "print(\"Number of neurons : {0}\".format(N_neurons))\n",
    "print(\"Number of synapses: {0}\".format(num_synapses))\n",
    "print(\"       Exitatory  : {0}\".format(int(CE * N_neurons) + N_neurons))\n",
    "print(\"       Inhibitory : {0}\".format(int(CI * N_neurons)))\n",
    "print(\"Excitatory events : {0}\".format(events_ex))\n",
    "print(\"Inhibitory events : {0}\".format(events_in))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f91fced7fd0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "nest.raster_plot.from_device(espikes, hist=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
